#ifndef SCENE_H
#define SCENE_H

#include "defs.h"
#include "model/object.h"

#include <vector>
#include <QObject>

class Object;

class Scene: public QObject {
    Q_OBJECT

public:
    Scene(const Scene& scene, QObject *parent = 0);
    Scene();

    struct Light {
        Point lightSource;
        light_t ilr;
        light_t ilg;
        light_t ilb;
        light_t ilar;
        light_t ilag;
        light_t ilab;
    };

    void setProperties(Light properties);
    const Light getProperties() const;
    Light getProperties();

public:
    virtual ~Scene();

    void setGround(Object *ground);
    void setSphere(Object *sphere);

    Object* getGround() const;
    Object* getSphere() const;

    const std::vector<const Object *> getObjects() const;
    std::vector<Object *> getObjects();

protected:
    Object *ground;
    Object *sphere;
    Light properties;

public slots:
    void setLightSourceX(light_t x);
    void setLightSourceY(light_t y);
    void setLightSourceZ(light_t z);
    void setIlr(light_t i);
    void setIlg(light_t i);
    void setIlb(light_t i);

    void setIlar(light_t i);
    void setIlag(light_t i);
    void setIlab(light_t i);

    void setGroundKar(light_t k);
    void setGroundKag(light_t k);
    void setGroundKab(light_t k);

    void setGroundKdr(light_t k);
    void setGroundKdg(light_t k);
    void setGroundKdb(light_t k);

    void setGroundKsr(light_t k);
    void setGroundKsg(light_t k);
    void setGroundKsb(light_t k);

    void setGroundN(light_t n);

    void setSphereKar(light_t k);
    void setSphereKag(light_t k);
    void setSphereKab(light_t k);

    void setSphereKdr(light_t k);
    void setSphereKdg(light_t k);
    void setSphereKdb(light_t k);

    void setSphereKsr(light_t k);
    void setSphereKsg(light_t k);
    void setSphereKsb(light_t k);

    void setSphereN(light_t n);


signals:
    void changed();
};

#endif // SCENE_H

